{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 无监督模型：Isolation Forest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import math\n",
    "import random\n",
    "%matplotlib inline\n",
    "import random\n",
    "from matplotlib import pyplot as plt\n",
    "import seaborn as sns\n",
    "from sklearn.metrics import roc_auc_score\n",
    "from sklearn.metrics import confusion_matrix,f1_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "Data = pd.read_csv(r\"C:/daily/creditcard.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\pc\\ana\\lib\\site-packages\\ipykernel\\__main__.py:5: FutureWarning: reshape is deprecated and will raise in a subsequent release. Please use .values.reshape(...) instead\n",
      "C:\\Users\\pc\\ana\\lib\\site-packages\\ipykernel\\__main__.py:6: FutureWarning: reshape is deprecated and will raise in a subsequent release. Please use .values.reshape(...) instead\n"
     ]
    }
   ],
   "source": [
    "from sklearn.preprocessing import StandardScaler, RobustScaler\n",
    "\n",
    "rob_scaler = RobustScaler()\n",
    "\n",
    "Data['scaled_amount'] = rob_scaler.fit_transform(Data['Amount'].reshape(-1,1))\n",
    "Data['scaled_time'] = rob_scaler.fit_transform(Data['Time'].reshape(-1,1))\n",
    "\n",
    "Data.drop(['Time','Amount'], axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_true=Data['Class']\n",
    "df_data=Data.drop('Class',1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.ensemble import IsolationForest\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(df_data, y_true, test_size=0.3, random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def train(X,clf,ensembleSize=5,sampleSize=10000):\n",
    "    lis=[]\n",
    "    for n in range(ensembleSize):\n",
    "        X=df_data.sample(sampleSize)\n",
    "        clf.fit(X)\n",
    "        lis.append(clf)\n",
    "    return lis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def predict(X,lis):\n",
    "    y_pred=np.zeros(X.shape[0])\n",
    "    for clf in lis:\n",
    "        y_pred=np.add(y_pred,clf.decision_function(X).reshape(X.shape[0],))\n",
    "    y_pred=(y_pred*1.0)/len(lis)\n",
    "    return y_pred"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "假设结果中有5%的异常样本"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.91315264280774144"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "alg=IsolationForest(n_estimators=100, max_samples='auto', contamination=0.005, \\\n",
    "                        max_features=1.0, bootstrap=False, n_jobs=-1, random_state=42, verbose=0)\n",
    "model=train(X_train,alg)\n",
    "y_pred=predict(X_test,model)\n",
    "\n",
    "y_pred=1-y_pred\n",
    "y_pred_class=y_pred.copy()\n",
    "y_pred_class[y_pred>=np.percentile(y_pred,95)]=1\n",
    "y_pred_class[y_pred<np.percentile(y_pred,95)]=0\n",
    "roc_auc_score(y_test, y_pred_class)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x16aa7fbb1d0>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x16aa7eefb70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cm=confusion_matrix(y_test, y_pred_class)\n",
    "df_cm = pd.DataFrame(cm,\n",
    "                  ['True Normal','True Fraud'],['Pred Normal','Pred Fraud'])\n",
    "\n",
    "sns.set(font_scale=1.4)\n",
    "sns.heatmap(df_cm, annot=True,annot_kws={\"size\": 16},fmt='g')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
